package com.clouddong.exterapi.service.impl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.clouddong.exterapi.dao.ProbeListDaoI;
import com.clouddong.exterapi.po.ProbeListTablePo;
import com.clouddong.exterapi.service.ProbeListServiceI;
import com.clouddong.exterapi.util.HttpClientUtil;
import com.clouddong.exterapi.util.JsonPluginsUtil;
import com.clouddong.exterapi.vo.ProbeListTableVo;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
/**
 * 
 * <p>Title:ProbeListServiceImpl </p>
 * <p>Description: 探针资源同步接口</p>
 * <p>Company: </p> 
 * @author wyx
 * @date 2018年5月24日 下午3:25:25
 */
@Service("probelistService")
@PropertySource("classpath:params.properties")
public class ProbeListServiceImpl implements ProbeListServiceI{

	@Autowired
	private Environment env;
	
	@Autowired
	ProbeListDaoI probeListDaoI;
	private final static Logger logger=LoggerFactory.getLogger(ProbeListServiceImpl.class);
	@Override
	@Transactional
	public void synchronizationByCondition() {
		SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String nowDate=df.format(new Date());
		//新的探针的数据map
		Map<String, ProbeListTableVo> newMap=new HashMap<String, ProbeListTableVo>();
		//旧的探针的数据map
		Map<String, ProbeListTableVo> oldMap=new HashMap<String, ProbeListTableVo>();
		//从接口获取新的探针数据
        List<ProbeListTableVo> probeNewList=getNewProbeList();
		//转入新数据map
        for (int i = 0; i < probeNewList.size(); i++) {
        	ProbeListTableVo probeListTableVo=probeNewList.get(i);
        	newMap.put(probeListTableVo.getProbe_id(), probeListTableVo);
		}
		//获取当前数据库的探针数据
        List<ProbeListTableVo> probeOldList=probeListDaoI.getProbeList();

		//转入旧数据map
        for (int i = 0; i < probeOldList.size(); i++) {
        	ProbeListTableVo probeListTableVo=probeOldList.get(i);
        	oldMap.put(probeListTableVo.getProbe_id(), probeListTableVo);
		}
		//新老数据比较，新有旧没有-插入；新有旧有-更新；新没有旧有-删除
        for(Map.Entry<String, ProbeListTableVo> entry:oldMap.entrySet()){
        	//老数据有新数据也有--更新
        	if(newMap.containsKey(entry.getKey())){
        		entry.getValue().setProbe_uptime(nowDate);
        		probeListDaoI.probeUpdate(entry.getValue());
        	}else{
        		//老数据有新数据没有--删除
        		probeListDaoI.probeDelByParams(entry.getValue());
        	}
        	
        }
        for(Map.Entry<String, ProbeListTableVo> entry:newMap.entrySet()){
        	//新数据有老数据没有--插入
        	if(!oldMap.containsKey(entry.getKey())){
        		entry.getValue().setProbe_uptime(nowDate);
        		probeListDaoI.probeInsert(entry.getValue());
        	}
        	
        }
        System.out.println("执行了=="+nowDate+"===");
	}

	
	public List<ProbeListTableVo> getNewProbeList() {
    	//ResourceBundle rb = ResourceBundle.getBundle("params");
        //String url=rb.getString("probelisturl");
		String url=env.getProperty("probelisturl");
		//String url="http://61.149.4.232:9099/dataproxy/proxy/probe/v2/list?source_id=110201791";
        //SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //String dfdate=df.format(new Date());
        String returnString="";
        Map<String, Object> map=new HashMap<String, Object>();
        //正式调试时放开注释
        returnString=HttpClientUtil.doGET(url, map, "UTF-8");
        //System.out.println(returnString);
        
        JSONObject jsonObject=new JSONObject();
        JSONArray jsonArray=new JSONArray();
        List<ProbeListTableVo> probeListTableVos=new ArrayList<ProbeListTableVo>();
        jsonObject=JSONObject.parseObject(returnString);
        if(jsonObject.containsKey("probes")&&jsonObject.getIntValue("status_code")==0){
        	jsonArray=jsonObject.getJSONArray("probes");
        	//System.out.println(JSONArray.parseArray(jsonObject.get("probes").toString()).size());
        	if(jsonArray.size()>0){
        		int num=jsonArray.size();
        		for (int i = 0; i < num; i++) {
        			ProbeListTableVo probeListTableVo=new ProbeListTableVo();
        			jsonObject=JSONObject.parseObject(jsonArray.getString(i));
        			String probeId=jsonObject.getString("probe_id");
        			String probeName=jsonObject.getString("probe_name");
        			String probeProvince=jsonObject.getString("region_pro_name");
        			String probeCity=jsonObject.getString("region_city_name");
        			probeListTableVo.setProbe_city(probeCity);
        			probeListTableVo.setProbe_id(probeId);
        			probeListTableVo.setProbe_province(probeProvince);
        			probeListTableVo.setProbe_name(probeName);
        			probeListTableVos.add(probeListTableVo);
				}
        	}
        	
        }
        logger.info("接口数据2："+JsonPluginsUtil.toPrintString(probeListTableVos));
        return probeListTableVos;
	}


	/* (non-Javadoc)
	 * @see com.clouddong.exterapi.service.ProbeListServiceI#getProbeDataList(com.clouddong.exterapi.vo.ProbeListTableVo)
	 */
	@Override
	public List<ProbeListTablePo> getProbeDataList(ProbeListTableVo proListTableVo) {
		//获取当前数据库的探针数据
        List<ProbeListTablePo> probeListTablePos=probeListDaoI.getProbeListByparams(proListTableVo);
		return probeListTablePos;
	}

}
